//
//  NSDate+SinaDate.swift
//  56-新浪时间处理
//
//  Created by Apple on 16/7/25.
//  Copyright © 2016年 Apple. All rights reserved.
//

import Foundation

extension NSDate {
    
    /**
     根据新浪时间字符串生成系统NSDate
     
     - parameter sinaDateString: 新浪时间字符串
     */
    class func date(sinaDateString: String) -> NSDate? {
        // 将新浪返回的时间字符串转成系统的NSDate
        let df = NSDateFormatter()
        
        // 告诉df 要转换字符串的格式
        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        // 如果是真机
        df.locale = NSLocale(localeIdentifier: "EN")
        
        let date = df.dateFromString(sinaDateString)
        return date
    }
    
    /**
     新浪时间描述, 拿新浪返回的时间和当前时间比较
     
     刚刚(一分钟内)
     X分钟前(一小时内)
     X小时前(当天)
     昨天 HH:mm(昨天)
     MM-dd HH:mm(一年内)
     yyyy-MM-dd HH:mm(更早期)
     */
    func sinaDateDescription() -> String {
        // self 新浪时间
        // NSDate() 当前时间
        let calendar = NSCalendar.currentCalendar()
        
        if calendar.isDateInToday(self) {
            // 新浪返回的时间是当天
            // 新浪时间和当前时间相差的秒数
            let delta = Int(NSDate().timeIntervalSinceDate(self))
            if delta < 60 {
                // 刚刚(一分钟内)
                return "刚刚"
            } else if delta < 60 * 60 {
                // X分钟前(一小时内)
                let min = delta / 60
                return "\(min) 分钟前"
            } else {
                // X小时前(当天)
                let h = delta / 60 / 60
                return "\(h) 小时前"
            }
        }
        
        // 需要转成特殊的字符串
        var dateFormat = ""
        
        if calendar.isDateInYesterday(self) {
            // 新浪返回的时间是昨天
            dateFormat = "昨天 HH:mm"
        } else if calendar.compareDate(self, toDate: NSDate(), toUnitGranularity: NSCalendarUnit.Year) == NSComparisonResult.OrderedSame {
            // 一年内
            // 新浪时间和当前时间是同一年
            dateFormat = "MM-dd HH:mm"
        } else {
            // 更早期
            dateFormat = "yyyy-MM-dd HH:mm"
        }
        
        // 将新浪时间(NSDate),转成特殊格式的字符串
        // NSDate -> String
        let df = NSDateFormatter()
        df.dateFormat = dateFormat
        df.locale = NSLocale(localeIdentifier: "EN")
        let dateString = df.stringFromDate(self)
        
        return dateString
    }
}